// 路由守卫 - 控制页面访问权限
import authUtil from './auth.js';

// 页面权限配置
const pagePermissions = {
  // 学生端页面 - 仅小程序可访问
  'pages/dashboard/index': { platform: 'miniprogram' },
  'pages/verify/index': { platform: 'miniprogram' },
  'pages/pay/index': { platform: 'miniprogram' },
  'pages/dorm/index': { platform: 'miniprogram' },
  'pages/info/index': { platform: 'miniprogram' },
  'pages/tasks/index': { platform: 'miniprogram' },
  'pages/message/index': { platform: 'miniprogram' },
  'pages/help/index': { platform: 'miniprogram' },
  
  // 教师端页面 - 仅Web端可访问，需要登录
  'pages/admin/index': { 
    platform: 'web', 
    requireAuth: true,
    roles: ['counselor', 'faculty', 'office'] 
  },
  
  // 登录页面 - 仅Web端可访问
  'pages/login/index': { platform: 'web' },
  
  // 通用页面 - 所有平台都可访问
  'pages/index/index': { platform: 'all' }
};

// 路由守卫
export function routerGuard(pagePath) {
  const permission = pagePermissions[pagePath];
  
  if (!permission) {
    console.warn(`页面 ${pagePath} 未配置权限，默认允许访问`);
    return true;
  }
  
  // 检查平台权限
  if (permission.platform && permission.platform !== 'all') {
    if (authUtil.platform !== permission.platform) {
      handleUnauthorizedAccess(pagePath, permission.platform);
      return false;
    }
  }
  
  // 检查登录状态（仅Web端需要）
  if (permission.requireAuth && authUtil.platform === 'web') {
    if (!authUtil.isLoggedIn()) {
      handleUnauthorizedAccess(pagePath, 'login');
      return false;
    }
  }
  
  // 检查角色权限
  if (permission.roles && permission.roles.length > 0) {
    if (!authUtil.hasPermission(permission.platform, permission.roles)) {
      handleUnauthorizedAccess(pagePath, 'role');
      return false;
    }
  }
  
  return true;
}

// 处理未授权访问
function handleUnauthorizedAccess(pagePath, reason) {
  console.warn(`页面 ${pagePath} 访问被拒绝，原因: ${reason}`);
  
  let message = '';
  let redirectUrl = '';
  
  switch (reason) {
    case 'web':
      message = '此页面仅支持Web端访问，请使用浏览器打开';
      redirectUrl = '/pages/dashboard/index'; // 小程序端默认首页
      break;
    case 'miniprogram':
      message = '此页面仅支持小程序端访问，请使用微信小程序打开';
      redirectUrl = '/pages/login/index'; // Web端默认登录页
      break;
    case 'login':
      message = '请先登录后再访问此页面';
      redirectUrl = '/pages/login/index';
      break;
    case 'role':
      message = '您没有权限访问此页面';
      redirectUrl = authUtil.getDefaultHomePage();
      break;
    default:
      message = '访问受限';
      redirectUrl = authUtil.getDefaultHomePage();
  }
  
  uni.showModal({
    title: '访问受限',
    content: message,
    showCancel: false,
    success: () => {
      // 跳转到对应页面
      uni.reLaunch({
        url: redirectUrl
      });
    }
  });
}

// 应用启动时的权限检查
export function appLaunchGuard() {
  const currentPage = getCurrentPages();
  if (currentPage.length > 0) {
    const currentPagePath = currentPage[currentPage.length - 1].route;
    return routerGuard(currentPagePath);
  }
  return true;
}

// 页面跳转前的权限检查
export function navigateTo(url, options = {}) {
  const pagePath = url.split('?')[0];
  
  if (routerGuard(pagePath)) {
    uni.navigateTo({
      url: url,
      ...options
    });
  }
}

// 重定向到指定页面
export function redirectTo(url, options = {}) {
  const pagePath = url.split('?')[0];
  
  if (routerGuard(pagePath)) {
    uni.redirectTo({
      url: url,
      ...options
    });
  }
}

// 重新启动到指定页面
export function reLaunch(url, options = {}) {
  const pagePath = url.split('?')[0];
  
  if (routerGuard(pagePath)) {
    uni.reLaunch({
      url: url,
      ...options
    });
  }
}

// 切换到指定页面
export function switchTab(url, options = {}) {
  const pagePath = url.split('?')[0];
  
  if (routerGuard(pagePath)) {
    uni.switchTab({
      url: url,
      ...options
    });
  }
}

// 获取默认首页（根据平台和登录状态）
export function getDefaultHomePage() {
  return authUtil.getDefaultHomePage();
} 